package pe.edu.upc.e41a.javasoft.service;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import pe.edu.upc.e41a.javasoft.dao.PublicacionDao;
import pe.edu.upc.e41a.javasoft.dao.TransaccionDao;
import pe.edu.upc.e41a.javasoft.dao.UsuarioDao;
import pe.edu.upc.e41a.javasoft.domain.Publicacion;
import pe.edu.upc.e41a.javasoft.domain.Transaccion;
import pe.edu.upc.e41a.javasoft.domain.Usuario;

@Service
@Transactional
public class TransaccionServiceImpl implements TransaccionService {

	@Resource
	private TransaccionDao transaccionDao;
	
	@Resource
	private UsuarioDao usuarioDao;
	
	@Resource
	private PublicacionDao publicacionDao;
	
	@Override
	public String registrarCompra(Transaccion transaccion) {
		String mensaje =null;
		try {
			mensaje=validarDatosCompra(transaccion);
			if (mensaje!=null) return mensaje;
			Publicacion publicacion=transaccion.getPublicacion();
			Character estado= publicacion.getEstado();
			if (estado.equals('V')) return "La publicación acaba de ser vendida";
			transaccionDao.registrarCompra(transaccion);
			int cantidad =publicacion.getCantidad();
			if (cantidad==1){
				publicacion.setCantidad(cantidad-1);
				publicacion.setEstado('V');
			}else{
				publicacion.setCantidad(cantidad-1);
			}
			publicacionDao.updatePublicacion(publicacion);
			Usuario usu=usuarioDao.findUsuario(publicacion.getUsuario().getCodigo());
			mensaje="Datos del vendedor : "+usu.getNombres()+" "+usu.getApellidoPaterno()+" "+usu.getApellidoMaterno()+" . La compra se registro exitosamente";
		} catch (Exception e) {
			mensaje="Error al registrar la compra : "+e.getMessage();
			return mensaje;
		}
		return mensaje;
	}
	
	private String validarDatosCompra(Transaccion transaccion){
		String mensaje=null;
		if (transaccion.getCantidad()==null) {
			mensaje="La cantidad no puede estar vacia";
		}else if (transaccion.getCantidad()==0){
			mensaje="La cantidad no puede estar vacia"; 
		}else if(transaccion.getCantidad()<0){
			mensaje="La cantidad debe ser un número positivo";
		}
		return mensaje;
	}

}
